package com.tms.gateway.config;

import cn.dev33.satoken.stp.StpInterface;
import com.tms.gateway.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Author：潘建冰
 * Package：com.tms.user.service.impl
 * Project：TaskManageSystem
 * name：StpInterfaceImpl
 * Date：2025/3/26  14:40
 */
@Component    //完成 Sa-Token 的自定义权限验证扩展
public class StpInterfaceImpl implements StpInterface {

    @Autowired
    RedisUtil redisUtil;


    /**
     * 返回一个账号所拥有的权限码集合
     */
    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        return getlist(loginId,"permission");
    }

    /**
     * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
     */
    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        return getlist(loginId,"roleList");
    }


    //redis拿取操作
    private List<String> getlist(Object loginId, String type) {
        if (type.equals("permission")){
            //存在缓存
            if (redisUtil.hasKey("permission:permissionCode:user:" + loginId)){
                // 使用lRange获取列表类型的全部数据
                return redisUtil.lRange("permission:permissionCode:user:" + loginId, 0, -1);
            }
        }else if (type.equals("roleList")){
            if (redisUtil.hasKey("permission:roleCode:user:"+loginId)){
                // 使用lRange获取列表类型的全部数据
                return redisUtil.lRange("permission:roleCode:user:"+loginId, 0, -1);
            }
        }
        return null;
    }

}
